import fs from 'node:fs';
import { PathCheckResults } from '@p/utils';

const isMdFilePathRegExp = /.*\.md$/;

function root(_path: string, type: 'file' | 'dir'): PathCheckResults {
	try {
		const stats = fs.statSync(_path);

		// 检查类型
		if (type === 'file') {
			if (!stats.isFile()) return 'type error';
		} else if (type === 'dir') {
			if (!stats.isDirectory()) return 'type error';
		}

		// 检查是否可读
		if (fs.accessSync(_path, fs.constants.R_OK) === null) return 'not read';

		// 检查ok
		return 'ok';
	} catch (error) {
		// 路径不存在
		return 'not exist';
	}
}

/**
 * 检查文件路径
 */
export const file = (_path: string) => root(_path, 'file');

/**
 * 检查目录路径
 */
export const dir = (_path: string) => root(_path, 'dir');

/**
 * 文件是否存在
 */
export const exist = (_path: string) => fs.existsSync(_path);

/**
 * 判断你是否为 markdown 文件路径
 */
export function isMdFilePath(filePath?: string) {
	if (!filePath) return false;

	if (!isMdFilePathRegExp.test(filePath)) return false;

	return root(filePath, 'file') === 'ok';
}
